/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __PID_H__
#define __PID_H__

#ifdef __cplusplus
extern "C" {
#endif

/* USER CODE BEGIN Includes */
#include "main.h"
/* USER CODE END Includes */

/* USER CODE BEGIN Private types */
enum{
    LLAST	= 2,
    LAST 	= 1,
    NOW 	= 0,
};

enum {
    POSITION_PID = 0, // 位置PID控制
    DELTA_PID = 1, // 增量PID控制
};

typedef struct
{
    int mode; // PID控制模式
    float Kp, Ki, Kd; // PID参数
    float error[3]; // 系统误差
    float Pout, Iout, Dout; // PID控制器分别的输出
    float output_limit; // PID控制器总输出限制，小于等于0表示不限制
    float integral_limit; // PID控制器积分限幅，小于等于0表示不限制
    float goal_last; // 上一次输入控制器的目标值
    float deadband; // PID控制器死区
    float pos_out, delta_out[2]; // PID控制器位置输出, 增量输出
} PID_TypeDef;
/* USER CODE END Private types */

/* USER CODE BEGIN Prototypes */
float PID_Calculate(PID_TypeDef* pid, float feedback, float goal);
/* USER CODE END Prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __PID_H__ */

